package com.itheima.ood.inner.demo06;

public class SwimmingDemo01 {

    //入口
    public static void main(String[] args) {

        //调用goSwimming这个方法，怎么去调用
        /**
         * 按照我们的想法，那么我们要调用goSwimming这个方法，
         * 那么我们就需要先去创建一个Swimming这个对象
         * 但是Swimming是一个接口，我们不能直接通过new
         * 关键字创建其对象，那么我们就应该去定义一个Swimming接口的子类，
         * 然后去创建对应的子类对象，把子类对象作为参数传递给goSwimming这个方法
         */
        //创建SwimmingImpl对象
        SwimmingImpl swimmingImpl = new SwimmingImpl();

        //调用goSwimming这个方法
        goSwimming(swimmingImpl);

        /**
         * 我们现在如果我只想去调用一次goSwimming这个方法，按照我们
         * 之前的思想，我们就定义了一个Swimming这个接口的子类，
         * 但是我们这个子类我们仅仅使用了一次，那我们觉得就有点浪费了。怎么办？
         * 我们就可以去使用匿名内部类来完成，因为匿名内部类本质就是一个接口或者一个类的子类对象
         */

        System.out.println("--------------------------------------------");

        goSwimming(new Swimming(){
            @Override
            public void swimming() {
                System.out.println("真麻烦，不游了.....................");
            }
        });

        System.out.println("--------------------------------------------");

        goSwimming(()->{
            System.out.println("还是游会儿吧...............................");
        });

    }

    //去游泳
    public static void goSwimming(Swimming swimming){
        swimming.swimming();
    }

}
